package com.cskaoyan.javase.oop2._1extends._11method;

/**
 * 测试方法的重写
 *      如果父类方法的返回值类型是一个父类类型
 *      那么子类重写该方法的返回值类型可以是一个子类类型
 *
 * 方法的形参数据类型和实参数据类型存在自动类型转换
 * 还有返回值类型和具体返回值的类型也存在自动类型转换
 * 引用数据类型同样适用
 *
 * @since 09:46
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
            method(new Father());
            method(new Son());
    }

    public static Father method() {
        // 返回一个子类对象是可以的,因为子类可以当成父类,是自动类型转换
        return new Son();
    }

    /*public static Son method2(){
        // 返回一个父类对象是不可以的,因为父类不可以当成子类,是强制类型转换
        return new Father();
    }*/

    public static void method(Father f) {
        f.test();
    }
}

class Father {
    public void test() {
        System.out.println("我是你爸爸!");
    }
}

class Son extends Father {
    @Override
    public void test() {
        System.out.println("我是您儿子!");
    }
}